﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace SQL
{
    //public class BaseClass
    //{
    //    public static void Log(String ctn, bool IsWriteLog = true)
    //    {
    //        if (IsWriteLog)
    //        {
    //            CreatLog();

    //            String str_filePath = GetFilePath();
    //            String str_ctn = "[" + DateTime.Now + "  " + GetCallerName() + "()] : " + ctn + "\r\n"/* + System.Environment.NewLine*/;
    //            writeFile(str_filePath, str_ctn);
    //        }
    //    }

    //    public static void CreatLog()
    //    {
    //        string FilePath = AppDomain.CurrentDomain.BaseDirectory + "\\Log\\";
    //        CheckFolder(FilePath, true);

    //        string[] FilePaths = Directory.GetFiles(FilePath, "*.txt", SearchOption.AllDirectories);

    //        for (Int32 i = 0; i < FilePaths.Length; i++)
    //        {
    //            try
    //            {
    //                FileInfo fi = new FileInfo(FilePaths[i].ToString());
    //                if (fi.CreationTime.Subtract(DateTime.Now).Days > 3)
    //                {
    //                    fi.Delete();
    //                }
    //            }
    //            catch
    //            {
    //            }
    //        }

    //    }

    //    public static void Log(String ctn, bool IsWriteLog, Int32 LogSize)
    //    {
    //        if (IsWriteLog)
    //        {
    //            CreatLog();

    //            String str_filePath = GetFilePath(LogSize);
    //            String str_ctn = "[" + DateTime.Now + "  " + GetCallerName() + "()] : " + ctn + "\r\n"/* + System.Environment.NewLine*/;
    //            writeFile(str_filePath, str_ctn);
    //        }
    //    }
    //    //读写锁，当资源处于写入模式时，其他线程写入需要等待本次写入结束之后才能继续写入
    //    static ReaderWriterLockSlim LogWriteLock = new ReaderWriterLockSlim();
    //    private static void writeFile(String str_filePath, String str_ctn)
    //    {
    //        try
    //        {
    //            LogWriteLock.EnterWriteLock();
    //            File.AppendAllText(str_filePath, str_ctn);
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        finally
    //        {
    //            //退出写入模式，释放资源占用
    //            //注意：一次请求对应一次释放
    //            //      若释放次数大于请求次数将会触发异常[写入锁定未经保持即被释放]
    //            //      若请求处理完成后未释放将会触发异常[此模式不下允许以递归方式获取写入锁定]
    //            LogWriteLock.ExitWriteLock();
    //        }
    //    }
    //    public static void LogError(String ctn)
    //    {
    //        CreatLog();

    //        String str_filePath = GetFilePath_e();
    //        String str_ctn = "[" + DateTime.Now + "  " + GetCallerName() + "()] : " + ctn + "\r\n"/* + System.Environment.NewLine*/;
    //        writeFile(str_filePath, str_ctn);
    //    }
    //    public static void LogError(String ctn, int LogSize)
    //    {
    //        CreatLog();

    //        String str_filePath = GetFilePath_e(LogSize);
    //        String str_ctn = "[" + DateTime.Now + "  " + GetCallerName() + "()] : " + ctn + "\r\n"/* + System.Environment.NewLine*/;
    //        writeFile(str_filePath, str_ctn);
    //    }
    //    public static void LogError(String ctn, string ThreadNo, int LogSize)
    //    {
    //        CreatLog();

    //        String str_filePath = GetFilePath_e(ThreadNo, LogSize);
    //        String str_ctn = "[" + DateTime.Now + "  " + GetCallerName() + "()] : " + ctn + "\r\n"/* + System.Environment.NewLine*/;
    //        writeFile(str_filePath, str_ctn);
    //    }
    //    public static void WriteLog(String ctn, bool IsWriteLog = true)
    //    {
    //        Log(ctn, IsWriteLog);
    //    }

    //    static ReaderWriterLockSlim LogWriteLock_GetFilePath = new ReaderWriterLockSlim();
    //    public static String GetFilePath()
    //    {
    //        String str_filePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + ".txt";
    //        try
    //        {
    //            LogWriteLock_GetFilePath.EnterWriteLock();
    //            FileInfo fi = new FileInfo(str_filePath);
    //            if (fi.Exists && fi.Length > 1048576) // 1MB(1048576 = 1024 * 1024)  1024000
    //            {
    //                String str_backupFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_backup.txt";

    //                if (File.Exists(str_backupFilePath))
    //                {
    //                    File.Delete(str_backupFilePath);
    //                }
    //                File.Move(str_filePath, str_backupFilePath);
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        finally
    //        {
    //            LogWriteLock_GetFilePath.ExitWriteLock();
    //        }
    //        return str_filePath;
    //    }

    //    static ReaderWriterLockSlim LogWriteLock_logsize = new ReaderWriterLockSlim();
    //    public static String GetFilePath(int LogSize)
    //    {
    //        String str_filePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + ".txt";
    //        try
    //        {
    //            LogWriteLock_logsize.EnterWriteLock();
    //            FileInfo fi = new FileInfo(str_filePath);
    //            if (fi.Exists && fi.Length > LogSize) // 1MB(1048576 = 1024 * 1024)  1024000
    //            {
    //                String str_backupFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_backup.txt";

    //                if (File.Exists(str_backupFilePath))
    //                {
    //                    File.Delete(str_backupFilePath);
    //                }
    //                File.Move(str_filePath, str_backupFilePath);
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        finally
    //        {
    //            LogWriteLock_logsize.ExitWriteLock();
    //        }
    //        return str_filePath;
    //    }

    //    static ReaderWriterLockSlim LogWriteLock_e = new ReaderWriterLockSlim();
    //    public static String GetFilePath_e()
    //    {
    //        String str_filePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_e.txt";

    //        try
    //        {
    //            LogWriteLock_e.EnterWriteLock();
    //            FileInfo fi = new FileInfo(str_filePath);
    //            if (fi.Exists && fi.Length > 1048576) // 1MB(1048576 = 1024 * 1024)  1024000
    //            {
    //                String str_backupFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_e_backup.txt";
    //                if (File.Exists(str_backupFilePath))
    //                {
    //                    File.Delete(str_backupFilePath);
    //                }
    //                File.Move(str_filePath, str_backupFilePath);
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        finally
    //        {
    //            LogWriteLock_e.ExitWriteLock();
    //        }
    //        return str_filePath;
    //    }

    //    static ReaderWriterLockSlim LogWriteLock_LogSize = new ReaderWriterLockSlim();
    //    public static String GetFilePath_e(int LogSize)
    //    {
    //        String str_filePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_e.txt";
    //        try
    //        {
    //            LogWriteLock_LogSize.EnterWriteLock();
    //            FileInfo fi = new FileInfo(str_filePath);
    //            if (fi.Exists && fi.Length > LogSize) // 1MB(1048576 = 1024 * 1024)  1024000
    //            {
    //                String str_backupFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_e_backup.txt";

    //                if (File.Exists(str_backupFilePath))
    //                {
    //                    File.Delete(str_backupFilePath);
    //                }
    //                File.Move(str_filePath, str_backupFilePath);
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        finally
    //        {
    //            LogWriteLock_LogSize.ExitWriteLock();
    //        }
    //        return str_filePath;
    //    }

    //    static ReaderWriterLockSlim LogWriteLock_e_no_logsize = new ReaderWriterLockSlim();
    //    public static String GetFilePath_e(string ThreadNo, int LogSize)
    //    {
    //        String str_filePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_e.txt";
    //        try
    //        {
    //            LogWriteLock_e_no_logsize.EnterWriteLock();
    //            FileInfo fi = new FileInfo(str_filePath);
    //            if (fi.Exists && fi.Length > LogSize) // 1MB(1048576 = 1024 * 1024)  1024000
    //            {
    //                String str_backupFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_e_backup.txt";

    //                if (File.Exists(str_backupFilePath))
    //                {
    //                    File.Delete(str_backupFilePath);
    //                }
    //                File.Move(str_filePath, str_backupFilePath);
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        finally
    //        {
    //            LogWriteLock_e_no_logsize.ExitWriteLock();
    //        }
    //        return str_filePath;
    //    }

    //    public static String GetCallerName()
    //    {
    //        String str_callerName;
    //        System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
    //        System.Diagnostics.StackFrame[] sfArr = st.GetFrames();
    //        System.Diagnostics.StackFrame sf = sfArr[2];
    //        MethodBase mb = sf.GetMethod();
    //        str_callerName = mb.DeclaringType.FullName + '.' + mb.Name;
    //        return str_callerName;
    //    }

    //    public static void Log_Ex(String ctn)
    //    {
    //        CreatLog();

    //        String str_filePath = GetErrorFilePath();
    //        String str_ctn = "[" + DateTime.Now + "  " + GetCallerName() + "()] : " + ctn + "\r\n"/* + System.Environment.NewLine*/;
    //        writeFile(str_filePath, str_ctn);
    //    }
    //    static ReaderWriterLockSlim LogWriteLock_ex = new ReaderWriterLockSlim();
    //    public static string GetErrorFilePath()
    //    {
    //        String str_filePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/log_" + AppDomain.GetCurrentThreadId().ToString() + "_ex.txt";
    //        try
    //        {
    //            LogWriteLock_ex.EnterWriteLock();
    //            FileInfo fi = new FileInfo(str_filePath);
    //            if (fi.Exists && fi.Length > 5048576) // 1MB(1048576 = 1024 * 1024)  1024000
    //            {
    //                String str_backupFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "/Log/Log_" + AppDomain.GetCurrentThreadId().ToString() + "_ex_bak.txt";

    //                if (File.Exists(str_backupFilePath))
    //                {
    //                    File.Delete(str_backupFilePath);
    //                }
    //                File.Move(str_filePath, str_backupFilePath);
    //            }
    //        }
    //        catch
    //        {
    //        }
    //        finally
    //        {
    //            LogWriteLock_ex.ExitWriteLock();
    //        }
    //        return str_filePath;
    //    }

    //    /// <summary>
    //    /// 检查目录是否存在，如果不存就创建目录
    //    /// </summary>
    //    /// <param name="strFolderPath"></param>
    //    /// <param name="CreateIfNotExist"></param>
    //    /// <returns></returns>
    //    public static bool CheckFolder(string strFolderPath, bool CreateIfNotExist)
    //    {
    //        try
    //        {
    //            if (Directory.Exists(strFolderPath))
    //            {
    //                return true;
    //            }
    //            if (CreateIfNotExist)
    //            {
    //                Directory.CreateDirectory(strFolderPath);
    //                return true;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            Log_Ex(ex.ToString());
    //        }
    //        return false;
    //    }

    //    /// <summary>
    //    /// 执行DOS命令方法
    //    /// </summary>
    //    /// <param name="dosCommand">dos命令</param>
    //    /// <param name="outtime">超时时间，超过，就主动停止</param>
    //    /// <returns></returns>
    //    public static string Execute(string FileName, string Arguments, int outtime)
    //    {
    //        string output = "";
    //        if (FileName != null && FileName != "")
    //        {
    //            Process process = new Process();//创建进程对象
    //            ProcessStartInfo startinfo = new ProcessStartInfo();//创建进程时使用的一组值，如下面的属性
    //            startinfo.FileName = FileName;//设定需要执行的命令程序
    //            //以下是隐藏cmd窗口的方法
    //            startinfo.Arguments = Arguments;//设定参数，要输入到命令程序的字符，其中"/c"表示执行完命令后马上退出
    //            startinfo.UseShellExecute = false;//不使用系统外壳程序启动
    //            startinfo.RedirectStandardInput = false;//不重定向输入
    //            startinfo.RedirectStandardOutput = true;//重定向输出，而不是默认的显示在dos控制台上
    //            startinfo.CreateNoWindow = true;//不创建窗口
    //            process.StartInfo = startinfo;

    //            try
    //            {
    //                if (process.Start())//开始进程
    //                {
    //                    if (outtime == 0)
    //                    { process.WaitForExit(); }
    //                    else
    //                    { process.WaitForExit(outtime); }
    //                    output = process.StandardOutput.ReadToEnd();//读取进程的输出
    //                }
    //            }
    //            catch
    //            {

    //            }
    //            finally
    //            {
    //                if (process != null)
    //                { process.Close(); }
    //            }
    //        }
    //        return output;
    //    }

    //}
}
